package com.dm.library.widgets;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.ImageView;


/**
 * 版 权: 深圳市迪蒙网络科技有限公司
 * 描 述: <圆角imageView>
 * 修 改 人: jinbailiang
 * 修改时间: 2017/7/11
 */
public class CornerImageView extends ImageView{
    public CornerImageView(Context context) {
        super(context);
    }

    public CornerImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CornerImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     *
     * @param imageDrawable 图片资源id
     * @param roundPixels 圆角 px 值
     * @param half 圆角类型
     */
    public void setCornerBitmapBackground(int imageDrawable, int roundPixels, HalfType half){
        //顶部圆角
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imageDrawable); // 先从资源中把背景图获取出来
        Bitmap roundBitmap = getRoundCornerImage(bitmap, roundPixels, half); // 将图片的上半部分圆弧化。
        Drawable dw = new BitmapDrawable(getResources(),roundBitmap);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { //api 16
            setBackground(dw);
        }else{
            setBackgroundDrawable(dw);
        }

    }

    public void setCornerBitmap(int imageDrawable, int roundPixels, HalfType half){
        //顶部圆角
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imageDrawable); // 先从资源中把背景图获取出来
        Bitmap roundBitmap = getRoundCornerImage(bitmap, roundPixels, half); // 将图片的上半部分圆弧化。
        setImageBitmap(roundBitmap);
    }

    /**
     * 图片圆角规则 eg. TOP：上半部分
     */
    public static enum HalfType {
        LEFT, // 左上角 + 左下角
        RIGHT, // 右上角 + 右下角
        TOP, // 左上角 + 右上角
        BOTTOM, // 左下角 + 右下角
        ALL // 四角
    }

    /**
     * 将图片的四角圆弧化
     *
     * @param bitmap      原图
     * @param roundPixels 弧度
     * @param half        （上/下/左/右）半部分圆角
     * @return
     */
    public  Bitmap getRoundCornerImage(Bitmap bitmap, int roundPixels, HalfType half) {
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        Bitmap roundConcerImage = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);//创建一个和原始图片一样大小的位图
        Canvas canvas = new Canvas(roundConcerImage);//创建位图画布
        Paint paint = new Paint();//创建画笔

        Rect rect = new Rect(0, 0, width, height);//创建一个和原始图片一样大小的矩形
        RectF rectF = new RectF(rect);
        paint.setAntiAlias(true);// 抗锯齿

        canvas.drawRoundRect(rectF, roundPixels, roundPixels, paint);//画一个基于前面创建的矩形大小的圆角矩形
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//设置相交模式
        canvas.drawBitmap(bitmap, null, rect, paint);//把图片画到矩形去

        switch (half) {
            case LEFT:
                return Bitmap.createBitmap(roundConcerImage, 0, 0, width - roundPixels, height);
            case RIGHT:
                return Bitmap.createBitmap(roundConcerImage, width - roundPixels, 0, width - roundPixels, height);
            case TOP: // 上半部分圆角化 “- roundPixels”实际上为了保证底部没有圆角，采用截掉一部分的方式，就是截掉和弧度一样大小的长度
                return Bitmap.createBitmap(roundConcerImage, 0, 0, width, height - roundPixels);
            case BOTTOM:
                return Bitmap.createBitmap(roundConcerImage, 0, height - roundPixels, width, height - roundPixels);
            case ALL:
                return roundConcerImage;
            default:
                return roundConcerImage;
        }
    }

}
